package edu.cuit.avatar;

/**
 * 存储整型数据的数据结构---栈:先进后出
 * @author <a href="mailto:1020zhaodan@163.com">Adan</a>
 * @version 1.0
 * @date 2025/7/5 10:45
 */
public class StackOfInteger {
    public static final int DEFAULT_CAPACITY = 8;
    /**
     * 存储整型数据的数组
     */
    private int[] elements;
    /**
     * 栈中元素个数
     */
    private int size;

    public StackOfInteger(){
        this(DEFAULT_CAPACITY);
    }

    public StackOfInteger(int capacity){
        elements = new int[capacity];
    }

    /**
     * 栈是否为空
     * @return 空栈：true
     */
    public boolean empty(){
        return size == 0;
    }

    /**
     * 返回栈中元素个数
     * @return 栈中元素个数
     */
    public int size(){
        return size;
    }

    /**
     * 将数据元素data压入栈顶
     * @param data 数据元素data
     */
    public void push(int data){
        //自动扩容
        if(size == elements.length){
            var temp = new int[elements.length * 2];
            System.arraycopy(elements, 0, temp, 0, elements.length);
            elements = temp;
        }
        elements[size++] = data;
    }

    /**
     * 弹出(删除)栈顶元素并返回
     * @return 栈顶元素
     */
    public int pop(){
        if(size == 0)
            throw new IllegalStateException("栈为空...");
        return elements[--size];
    }

    /**
     * 查看(不删除)栈顶元素
     * @return 栈顶元素
     */
    public int peek(){
        if(size == 0)
            throw new IllegalStateException("栈为空...");
        return elements[size - 1];
    }
}
